package com.example.tpl.system.service;

import com.example.tpl.system.util.Result;
import com.example.tpl.system.util.ResultPage;
import com.example.tpl.system.vo.common.DeleteBatchReqVo;
import com.example.tpl.system.vo.common.QueryDetailReqVo;
import com.example.tpl.system.vo.common.UpdateStatusReq;
import com.example.tpl.system.vo.req.AllocatedListReq;
import com.example.tpl.system.vo.req.CancelAuthUserAllReq;
import com.example.tpl.system.vo.req.CancelAuthUserReq;
import com.example.tpl.system.vo.req.QueryRoleMenuReq;
import com.example.tpl.system.vo.req.QueryRoleReqVo;
import com.example.tpl.system.vo.req.RoleMenuReq;
import com.example.tpl.system.vo.req.RoleReqVo;
import com.example.tpl.system.vo.req.SelectAuthUserAllReq;
import com.example.tpl.system.vo.req.UnallocatedListReq;
import com.example.tpl.system.vo.resp.RoleMenuResp;
import com.example.tpl.system.vo.resp.RoleRespVo;
import com.example.tpl.system.vo.resp.UserRespVo;

/**
 * 描述：角色信息
 * 作者：刘飞华
 * 日期：2025-01-14 10:40:16
 */
public interface RoleService {

    /**
     * 添加角色信息
     *
     * @param role 请求参数
     * @return int
     * @author 刘飞华
     * @date: 2025-01-14 10:40:16
     */
    Result<Integer> addRole(RoleReqVo role);

    /**
     * 删除角色信息
     *
     * @param role 请求参数
     * @return int
     * @author 刘飞华
     * @date: 2025-01-14 10:40:16
     */
    Result<Integer> deleteRole(DeleteBatchReqVo role);

    /**
     * 更新角色信息
     *
     * @param role 请求参数
     * @return int
     * @author 刘飞华
     * @date: 2025-01-14 10:40:16
     */
    Result<Integer> updateRole(RoleReqVo role);

    /**
     * 更新角色信息状态
     *
     * @param role 请求参数
     * @return int
     * @author 刘飞华
     * @date: 2025-01-14 10:40:16
     */
    Result<Integer> updateRoleStatus(UpdateStatusReq role);

    /**
     * 查询角色信息详情
     *
     * @param role 请求参数
     * @return RoleResp
     * @author 刘飞华
     * @date: 2025-01-14 10:40:16
     */
    Result<RoleRespVo> queryRoleDetail(QueryDetailReqVo role);

    /**
     * 查询角色信息列表
     *
     * @param role 请求参数
     * @return ResultPage<RoleResp>
     * @author 刘飞华
     * @date: 2025-01-14 10:40:16
     */
    Result<ResultPage<RoleRespVo>> queryRoleList(QueryRoleReqVo role);


    /**
     * 查询角色关联的菜单
     *
     * @param roleMenuReq 请求参数
     * @return MenuRespVo
     * @author 刘飞华
     * @date: 2025/01/15 15:09:35
     */
    Result<RoleMenuResp> queryRoleMenu(QueryRoleMenuReq roleMenuReq);

    /**
     * 更新角色关联的菜单
     *
     * @param roleMenuReq 请求参数
     * @return Integer
     * @author 刘飞华
     * @date: 2025/01/15 15:09:35
     */
    Result<Integer> updateRoleMenu(RoleMenuReq roleMenuReq);

    /**
     * 查询已分配用户角色列表
     *
     * @param allocatedListReq 请求参数
     * @return UserRespVo
     * @author 刘飞华
     * @date: 2025/01/15 15:09:35
     */
    Result<ResultPage<UserRespVo>> queryAllocatedList(AllocatedListReq allocatedListReq);

    /**
     * 查询未分配用户角色列表
     *
     * @param unallocatedListReq 请求参数
     * @return UserRespVo
     * @author 刘飞华
     * @date: 2025/01/15 15:09:35
     */
    Result<ResultPage<UserRespVo>> queryUnallocatedList(UnallocatedListReq unallocatedListReq);

    /**
     * 取消授权用户
     *
     * @param cancelAuthUserReq 请求参数
     * @return Integer
     * @author 刘飞华
     * @date: 2025/01/15 15:09:35
     */
    Result<Integer> cancelAuthUser(CancelAuthUserReq cancelAuthUserReq);

    /**
     * 批量取消授权用户
     *
     * @param authUserAllReq 请求参数
     * @return Integer
     * @author 刘飞华
     * @date: 2025/01/15 15:09:35
     */
    Result<Integer> batchCancelAuthUser(CancelAuthUserAllReq authUserAllReq);

    /**
     * 批量选择用户授权
     *
     * @param authUserAllReq 请求参数
     * @return Integer
     * @author 刘飞华
     * @date: 2025/01/15 15:09:35
     */
    Result<Integer> batchAuthUser(SelectAuthUserAllReq authUserAllReq);
}